package com.wx.gof.pattern.behavioral.responsibility;

/**
 * @ClassName Application
 * @Author wx
 * @Description
 * 定义:
 * 为请求创建一个接收此次请求的对象链
 * 描述:
 * 责任链模式是一种对象的行为模式。在责任链模式里，很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。
 * 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求，这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
 * 1.一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个：一是承担责任，而是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又，
 * 把责任向下传的情况。
 * 2.在一个纯的责任链模式里面，一个请求必须被某一个处理者对象所接收；在一个不纯的责任链模式里面，一个请求可以最终不被任何接收端对象所接收。纯的责任链模式的实际例子很难找到，
 * 一般看到的例子均是不纯的责任链模式的实现。
 * 适用场景:
 * 1.一个请求的处理需要多个对象当中的一个或多个协作处理
 * 优点:
 * 1.责任链可以动态组合-把责任链顺序以及是否需要这责任链全部做成外部配置
 * 缺点:
 * 1.责任链太长或者处理时间太长，影响性能
 * 理解:
 * 应用程序-责任链设计模式(一个请求需要责任链中的一个或多个对象进行处理，请求发送者与处理者解耦，责任链可以动态组合，比如过滤器Fiter就是使用责任链模式)
 * @Date 2018-12-16-17:12
 */
public class Application {
    public static void main(String[] agrs){
        Handler projectManager = new ProjectManager();
        Handler deptManager = new DeptManager();
        Handler generalManager = new GeneralManager();
        projectManager.setHandler(deptManager);
        deptManager.setHandler(generalManager);
        System.out.println(projectManager.handleFeeRequest(200.00));
    }
}
